//
//  YZYHomeViewController.swift
//  Y微Z博Y
//
//  Created by mac on 16/10/22.
//  Copyright © 2016年 mac. All rights reserved.
//

import UIKit
// cell 可重用表示符
private let statusCellIdentifier = "statusCellIdentifier"

class YZYHomeViewController: YZYVisitorViewController {

    // viewModel 对象
    let statusListViewModel = YZYStatusListViewModel()
    
    override func viewDidLoad() {
        super.viewDidLoad()
        // 判断用户是否登录
        if !isLogin {
            // 设置访客视图信息
            visitorView?.setupVisitorViewInfo(imgName: nil, title: nil)
            return
        }
        setupUI()
        getStatusData()

    }
    
    // MARK: - 监听事件
    @objc private func leftClick() {
        print("左侧按钮点击")
    }
    
    @objc private func rightClick() {
        print("右侧按钮点击")
        // 创建
        let tempVc = YZYTempViewController()
        // 隐藏 rabBar
        tempVc.hidesBottomBarWhenPushed = true
        navigationController?.pushViewController(tempVc, animated: true)
    }
    
    // MARK: - 设置视图
    private func setupUI() {
        setupNav()
        setupTableViewInfo()
    }
    
    // MARK: - 设置 tableView 相关信息
    private func setupTableViewInfo(){
        
        // 设置数据源
        tableView.dataSource = self
        tableView.delegate = self
        // 注册 cell
        tableView.register(YZYStatusCell.self, forCellReuseIdentifier: statusCellIdentifier)
        // cell 高度
        // UITableViewAutomaticDimension 自动计算行高
        tableView.rowHeight = UITableViewAutomaticDimension
        // 设置预估行高estimatedRowHeight -> 越接近真实高度越好
        tableView.estimatedRowHeight = 200
        // tableView 显示个样式
        tableView.separatorStyle = .none
        
        // 设置 footView
        tableView.tableFooterView = bottomView
        // 添加系统下拉刷新控件
        tableView.addSubview(refreshControl)
        refreshControl.addTarget(self, action: #selector(getStatusData), for: UIControlEvents.valueChanged)
        
    }

    
    // MARK: - 设置导航
    private func setupNav() {
        navigationItem.leftBarButtonItem = UIBarButtonItem(setHighlightedImgName: "navigationbar_pop", target: self, action: #selector(leftClick))
        navigationItem.rightBarButtonItem = UIBarButtonItem(setHighlightedImgName: "navigationbar_friendsearch", target: self, action: #selector(rightClick))
    }
    
    // MARK: - 懒加载控件
    // 菊花
    fileprivate lazy var bottomView: UIActivityIndicatorView = {
        let view = UIActivityIndicatorView(activityIndicatorStyle: UIActivityIndicatorViewStyle.whiteLarge)
        // 设置颜色
        view.color = UIColor.purple
        return view
    }()
    
    // 系统的下拉刷新控件
    fileprivate lazy var refreshControl: UIRefreshControl = UIRefreshControl()
}

// MARK: - 请求数据
extension YZYHomeViewController{
    // 请求数据
    func getStatusData(){
        // 委托 statusListViewModel 请求数据
        // bottomView.isAnimating 如果他开启动画 就代表是上啦加载更多 反之没有动画 我们就认为是下拉刷新
        //
        statusListViewModel.getHomeData(isPullUp: bottomView.isAnimating) { (isSuccess) in
            if !isSuccess {
                print("请求数据失败")
                
            }else {
                // 刷新 UI
                self.tableView.reloadData()
            }
            self.endRefreshing()
        }
    }
    
    // 停止下拉和上啦动画
    func endRefreshing() {
        // 停止动画
        self.bottomView.stopAnimating()
        // 下拉刷新也要停止
        self.refreshControl.endRefreshing()
    }
    
}

// MARK: - UITableViewDataSource
extension YZYHomeViewController: UITableViewDataSource, UITableViewDelegate {
    
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return statusListViewModel.dataArray.count
    }
    
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: statusCellIdentifier, for: indexPath) as! YZYStatusCell
        // 给 cell 赋值
        cell.statusViewModel = statusListViewModel.dataArray[indexPath.row]
        // 取消 cell 选中效果
        cell.selectionStyle = .none
        return cell
    }
    // 将要显示的 cell
    func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
        
        // 如果 indexPath.row == 19  -> count - 1 代表显示最后一个 cell
        if indexPath.row == statusListViewModel.dataArray.count - 1 && !bottomView.isAnimating {
            // 开启动画
            bottomView.startAnimating()
            // 马上请求数据
            getStatusData()
        }
    }
    
}


